/**
 * Created by wangyongchao
 *
 * validate
 *
 *
 */

import {computeSNMA, computeIp, ipToNumber} from '@/utils/ipTools';

/**
 * name(字母、数字、下划线、中划线、中文组成且32位)
 *
 * @param isNameCH
 * @returns {boolean}
 */
export function checkNameCH(isNameCH) {
  var rg = /^[\u4e00-\u9fa5|a-zA-Z0-9|_|\-\.]{0,31}$/;
  var exceptStr = "NMC_";	//名字不能以此开头
  var exceptStr1 = "hub";	//名字不能以此开头
  if (typeof(isNameCH)=='undefined' || isNameCH == "" || isNameCH.length == 0) {
    return false;
  }
  if (isNameCH != "" &&
    (!rg.test(isNameCH) ||
      (isNameCH.indexOf(exceptStr) == 0) ||
      (isNameCH.indexOf(exceptStr1) == 0) ||
      isNameCH.replace(/[\u4e00-\u9fa5]/ig, 'xx').length > 32)) {
    return false;
  }
  return true;
}

/**
 * name(字母、数字、下划线、中划线、中文组成且最多64位)
 *
 * @param idForm
 * @returns {*}
 */
export function checkNameCH64(isNameCH64){
  var rg= /^([a-zA-Z0-9|_|-]|[\u4e00-\u9fa5]){1,64}$/;
  if(isNameCH64.length == 0){
    return false;
  }
  if (!(rg.test(isNameCH64)) || isNameCH64.replace(/[\u4e00-\u9fa5]/ig, 'xx').length > 64){
    return false;
  }
  return true;
}

/**
 * name(字母、数字、下划线、中划线、中文组成且32位)
 *
 * @param isNameCH
 * @returns {boolean}
 */
export function checkNameCH2(isNameCH) {
  var rg = /^[\u4e00-\u9fa5|a-zA-Z0-9|_|\-\.]{0,31}$/;
  if (typeof(isNameCH)=='undefined' || isNameCH == "" || isNameCH.length == 0) {
    return false;
  }
  if (isNameCH != "" &&
    (!rg.test(isNameCH) || isNameCH.replace(/[\u4e00-\u9fa5]/ig, 'xxx').length > 32)) {
    return false;
  }
  return true;
}

/**
 *
 * @param str
 * @returns {boolean}
 */
export function isvalidUsername(str) {
  return str.trim().length > 0;
}

/* 合法uri*/
export function validateURL(textval) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

/* 小写字母*/
export function validateLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 大写字母*/
export function validateUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 大小写字母*/
export function validateAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
 * 校验email
 * @param email
 * @returns {boolean}
 */
export function validateEmail(email) {
  const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return re.test(email)
}

/**
 * 校验IP
 * @param ip
 * @returns {boolean}
 */
export function checkIp(ip) {
  var rg = /^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/;
  return rg.test(ip);
}

/**
 * 校验MAC
 *
 * 仅支持00:00:00:00:00:00格式    /^([a-f0-9]{2}:){5}[a-f0-9]{2}$/gi
 *
 * 支持 : 和 - 格式    /^(([a-f0-9]{2}:)|([a-f0-9]{2}-)){5}[a-f0-9]{2}$/gi
 *
 * @param mac
 * @returns {boolean}
 */
export function checkMac(mac) {
  var rg = /^([a-f0-9]{2}:){5}[a-f0-9]{2}$/gi;
  return rg.test(mac);
}

/**
 * 检查MAC集合是否合法
 *
 * 目前只支持格式为00:00:00:00:00:00的MAC地址
 * @param macs
 * @returns {boolean}
 */
export function checkMacs(macs) {
  //如果为空字符串，直接返回false
  if(!checkIsNotNullOrUndefined(macs)){
    return false;
  }

  let macArr = macs.split(/\n/g); //将textarea里的MAC，以回车符分割;
  for(var i=0;i<macArr.length;i++) {
    if(!checkMac(macArr[i])){
      return false
    }
  }

  return true;
}

/**
 * 检查是否是undefined或null或空字符串；如果是，则返回false，不是则返回true；
 * @param str
 * @returns {boolean}
 */
export function checkIsNotNullOrUndefined(str){
  if(typeof(str) == "undefined" || str=='' || str==null){
    return false;
  }

  return true;
}

/**
 * 判断数组中是否存在重复数据，并返回该数据
 * @returns {string}
 */
export function getRepeatInArr(arr) {
  var nary = arr.sort();
  for (var i = 0; i < arr.length; i++) {
    if (nary[i] == nary[i + 1]) {
      return nary[i];
    }
  }
}

/**
 * 判断数组中是否存在重复数据，如果有重复数据，则返回true，否则返回false
 * @param arr
 * @returns {boolean}
 */
export function isRepeatInArr(arr) {
  var hash = {};
  for (var i in arr) {
    if (hash[arr[i]]){
      return true;
    }
    hash[arr[i]] = true;
  }
  return false;
}

/**
 * 软件黑白名单用于检查IP地址的方法
 *
 * 支持格式
   单个IP：172.16.1.3
   IP范围：172.16.1.10-172.16.1.15
   IP网段：172.16.2.0/24

   最多可配1024个静态IP

   输入IP不允许127开头的环回地址
   输入IP不允许为0.0.0.0

   不能输入重复的IP地址！
 *
 * @param ip
 * @param that
 */
export function checkWhiteBlackIp(ips, that){
  /*判断IP地址是否为空*/
  if (typeof(ips)=='undefined' || ips=='' || ips.length == 0) {
    return false;
  }

  var str1 = "ALL";
  var str2 = "全部";

  // 如果是全部或者ALL，直接返回true，不需要继续判断
  if (str1 == ips || str2 == ips) {
    return true;
  }

  //校验IP地址
  var rg = /^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/;

  //校验两种掩码
  var rg2 = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/;
  var rg3 = /^([0-9]|1[0-9]|2[0-9]|3[0-2])$/;

  //定义IP字符串数组
  var ipStrArr = ips.split(/\n/g);
  var ipSegmentList = {};
  var ipStrArrCount = ipStrArr.length;
  var ipNullStrCount = 0;

  for(var i=0;i<ipStrArr.length;i++) {
    let tempIpStr = ipStrArr[i].replace(/(^\s*)|(\s*$)/g, "");
    if(tempIpStr == ''){
      ipNullStrCount++;
      continue;
    }

    var tempIp= '';
    var tempMask='';

    var tempIpStart='';
    var tempIpEnd='';

    if(tempIpStr.search(/\//g) != -1){
      //说明IP地址为IP+掩码格式
      tempIp = tempIpStr.substring(0, tempIpStr.search(/\//g));
      tempMask = tempIpStr.substring(tempIpStr.search(/\//g) + 1);

      if(!(rg2.test(tempMask) || rg3.test(tempMask)) || !rg.test(tempIp)){
        //校验掩码是否正确
        that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipMaskError').formatVueText(tempIpStr));
        return false;
      }

      //对于存在掩码的，如果掩码是数字，就赋值给maskLong
      //不是数字，就要计算出数字
      var reg = /^[0-9]+.?[0-9]*$/;
      var maskLong = 0;
      if (!reg.test(tempMask)) {
        maskLong = computeSNMA(tempMask);
      } else {
        maskLong = tempMask;
      }

      let tempIpSegment = computeIp(tempIp, maskLong);
      ipSegmentList[tempIpStr] = tempIpSegment;
    }
    else if(tempIpStr.search(/\-/g) != -1){
      //说明IP地址为IP-IP格式
      tempIpStart= tempIpStr.substring(0, tempIpStr.search(/\-/g));
      tempIpEnd = tempIpStr.substring(tempIpStr.search(/\-/g) + 1);

      if(!rg.test(tempIpStart) || !rg.test(tempIpEnd)){
        //校验IP是否正确
        that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipSegmentError').formatVueText(tempIpStr));
        return false;
      }

      if(ipToNumber(tempIpStart) > ipToNumber(tempIpEnd)){
        //校验IP开始是否大于IP结束
        that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipSegmentError2').formatVueText(tempIpStr));
        return false;
      }
      ipSegmentList[tempIpStr] = tempIpStr;
    }
    else{
      //说明为静态IP
      tempIp = tempIpStr;
      if(!rg.test(tempIp)){
        //校验IP是否正确
        that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipError').formatVueText(tempIpStr));
        return false;
      }
      ipSegmentList[tempIpStr] = tempIp+'-'+tempIp;
    }
  }

  if(ipStrArrCount == ipNullStrCount){
    //IP地址全部为空，不合法
    that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipErrorEmpty'));
    return false;
  }

  //记录IP数量，用于判断是否超过1024个静态IP
  var ipCount = 0;

  for(var key in ipSegmentList) {
    let tempIpSegment = ipSegmentList[key].split('-');
    tempIpStart = tempIpSegment[0];
    tempIpEnd = tempIpSegment[1];

    //判断IP是否包含0.0.0.0
    if(tempIpStart==='0.0.0.0'){
      that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipError0').formatVueText(key));
      return false;
    }

    //判断IP地址的数量是否超过了1024个
    let tempCount = ipToNumber(tempIpEnd)-ipToNumber(tempIpStart);
    if((tempCount+ipCount) > 1024){
      that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipError1024'));
      return false;
    }
    ipCount = ipCount + tempCount;

    let firstIpArr = tempIpStart.split('.');
    let lastIpArr = tempIpEnd.split('.');

    //判断IP地址是否包含127开头的地址
    if(startWith127(firstIpArr, lastIpArr, that)){
      that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipError127').formatVueText(key));
      return false;
    }

    for(var k2 in ipSegmentList){
      let tempIpSegment2 = ipSegmentList[k2].split('-');
      let tempIpStart2 = ipToNumber(tempIpSegment2[0]);
      let tempIpEnd2 = ipToNumber(tempIpSegment2[1]);
      if(key == k2) {
        continue;
      }

      if(ipToNumber(tempIpStart) > tempIpEnd2 || ipToNumber(tempIpEnd) < tempIpStart2){
        continue;
      }

      that.$message.error(that.$t('accessControl.whiteBlackListIpError.ipErrorRepeat').formatVueText(key, k2));
      return false;
    }
  }

  return true;
}

/**
 * 是否包含以127开头的地址
 * @param firstIpArr
 * @param lastIpArr
 * @returns {boolean}
 */
function startWith127(firstIpArr, lastIpArr){
  if(firstIpArr[0] == 127){
    return true;
  }
  if(lastIpArr[0] == 127){
    return true;
  }
  if(firstIpArr[0]<127 && lastIpArr[0]>127){
    return true;
  }
  return false;
}

/**
 * 判断是否数字
 * @param obj
 * @returns {boolean}
 */
export function isNum(obj){
  return Math.floor(obj) === obj
}

/**
 * 判断是否正整数
 * @param num
 * @returns {boolean}
 */
export function isPositiveInteger(num){
  //判断正整数
  var re = /^[1-9]+[0-9]*]*$/;
  return re.test(num);
}

/**
 * 检查VLAN配置
 * @param vlans
 * @param that
 * @returns {boolean}
 */
export function checkVLAN(vlans){
  if(!checkIsNotNullOrUndefined(vlans)){
    return false;
  }
  //判断正整数
  var re = /^[1-9]+[0-9]*]*$/;

  var vlanArr = vlans.split(/\n/g);
  try {
    for(var i=0;i<vlanArr.length;i++) {
      let tempVlan = vlanArr[i].split('-');
      let vStart = tempVlan[0];
      let vEnd = tempVlan[1];

      //判断正整数
      if(!re.test(vStart) || !re.test(vEnd)){
        return false;
      }

      let vs = parseInt(vStart);
      let ve = parseInt(vEnd);

      //取值范围1-4094；
      if(vs<1 || ve>4094){
        return false;
      }

      //前者小于后者
      if(vs >= ve){
        return false;
      }

      //两者之差不能大于10
      if((ve-vs)>10){
        return false;
      }
    }
  } catch (e) {
    return false;
  }

  return true;
}

/**
 * 检查DDOS防护的DOS中的白名单，只支持格式为   192.168.1.1/24
 * @param ips
 * @returns {boolean}
 */
export function checkDDOSWhiteListIp(ips){
  if(ips==''){
    return true;
  }

  //校验IP地址
  var rg = /^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/;

  //校验两种掩码
  var rg2 = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/;
  var rg3 = /^([0-9]|1[0-9]|2[0-9]|3[0-2])$/;

  //定义IP字符串数组
  var ipStrArr = ips.split(/\n/g);

  for(var i=0;i<ipStrArr.length;i++) {
    let tempIpStr = ipStrArr[i].replace(/(^\s*)|(\s*$)/g, "");

    var tempIp= '';
    var tempMask='';

    if(tempIpStr.search(/\//g) != -1){
      //说明IP地址为IP+掩码格式
      tempIp = tempIpStr.substring(0, tempIpStr.search(/\//g));
      tempMask = tempIpStr.substring(tempIpStr.search(/\//g) + 1);

      if(!(rg2.test(tempMask) || rg3.test(tempMask)) || !rg.test(tempIp)){
        //校验掩码是否正确
        return false;
      }
    }else{
      return false;
    }
  }

  return true;
}


/**
 * 用于判断DDOS防护中的DDOS页面的，源地址允许通过的IP和排除的IP
 *
 * @param ips
 * @returns {boolean}
 */
export function checkDDOSAllowOrExcludeIp(ips){
  return checkMutiIpSegment(ips);
}

/**
 * 检验IP地址
 *
 * 单个IP：172.16.1.3
   IP范围：172.16.1.10-172.16.1.15
   IP网段：172.16.2.0/24
   每行一个
 * @param ips
 * @returns {boolean}
 */
export function checkMutiIpSegment(ips){
  if(ips==''){
    return true;
  }

  var str1 = "ALL";
  var str2 = "全部";

  // 如果是全部或者ALL，直接返回true，不需要继续判断
  if (str1 == ips || str2 == ips) {
    return true;
  }

  //校验IP地址
  var rg = /^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/;

  //校验两种掩码
  var rg2 = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/;
  var rg3 = /^([0-9]|1[0-9]|2[0-9]|3[0-2])$/;

  //定义IP字符串数组
  var ipStrArr = ips.split(/\n/g);

  for(var i=0;i<ipStrArr.length;i++) {
    let tempIpStr = ipStrArr[i].replace(/(^\s*)|(\s*$)/g, "");

    var tempIp= '';
    var tempMask='';

    var tempIpStart='';
    var tempIpEnd='';

    if(tempIpStr.search(/\//g) != -1){
      //说明IP地址为IP+掩码格式
      tempIp = tempIpStr.substring(0, tempIpStr.search(/\//g));
      tempMask = tempIpStr.substring(tempIpStr.search(/\//g) + 1);

      if(!(rg2.test(tempMask) || rg3.test(tempMask)) || !rg.test(tempIp)){
        //校验掩码是否正确
        return false;
      }
    }
    else if(tempIpStr.search(/\-/g) != -1){
      //说明IP地址为IP-IP格式
      tempIpStart= tempIpStr.substring(0, tempIpStr.search(/\-/g));
      tempIpEnd = tempIpStr.substring(tempIpStr.search(/\-/g) + 1);

      if(!rg.test(tempIpStart) || !rg.test(tempIpEnd)){
        //校验IP是否正确
        return false;
      }

      if(ipToNumber(tempIpStart) > ipToNumber(tempIpEnd)){
        //校验IP开始是否大于IP结束
        return false;
      }
    }
    else{
      //说明为静态IP
      tempIp = tempIpStr;
      if(!rg.test(tempIp)){
        //校验IP是否正确
        return false;
      }
    }
  }

  return true;
}

/**
 * 检验IP地址
 *
 * 单个IP：172.16.1.3
 IP网段：172.16.2.0/24
 每行一个
 * @param ips
 * @returns {boolean}
 */
export function checkMutiIpSegment2(ips){
  if(ips==''){
    return true;
  }

  var str1 = "ALL";
  var str2 = "全部";

  // 如果是全部或者ALL，直接返回true，不需要继续判断
  if (str1 == ips || str2 == ips) {
    return true;
  }

  //校验IP地址
  var rg = /^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/;

  //校验两种掩码
  var rg2 = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/;
  var rg3 = /^([0-9]|1[0-9]|2[0-9]|3[0-2])$/;

  //定义IP字符串数组
  var ipStrArr = ips.split(/\n/g);

  for(var i=0;i<ipStrArr.length;i++) {
    let tempIpStr = ipStrArr[i].replace(/(^\s*)|(\s*$)/g, "");

    var tempIp= '';
    var tempMask='';

    if(tempIpStr.search(/\//g) != -1){
      //说明IP地址为IP+掩码格式
      tempIp = tempIpStr.substring(0, tempIpStr.search(/\//g));
      tempMask = tempIpStr.substring(tempIpStr.search(/\//g) + 1);

      if(!(rg2.test(tempMask) || rg3.test(tempMask)) || !rg.test(tempIp)){
        //校验掩码是否正确
        return false;
      }
    }
    else if(tempIpStr.search(/\-/g) != -1){
      return false;
    }
    else{
      //说明为静态IP
      tempIp = tempIpStr;
      if(!rg.test(tempIp)){
        //校验IP是否正确
        return false;
      }
    }
  }

  return true;
}

/**
 * 传入的数字是否在两个数字之间，大于等于起始，小于等于结束
 * @param num
 * @param start
 * @param end
 */
export function isNumBetween(num, start, end){
  if(num < start || num > end){
    return false;
  }

  return true;
}


/**
 * 数字字母下划线组成的8~95位之间的字符串
 *
 * @param idForm
 * @returns {*}
 */
export function checkPwdSNMP(str){
  var rg= /^[a-zA-Z0-9|_]{8,95}$/;
  if(str.length == 0){
    return false;
  }
  if (!rg.test(str)){
    return false;
  }
  return true;
}

/**
 * 校验EMail是否合法
 * @param str
 * @returns {boolean}
 */
export function checkMail(str) {
  var rg = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/i;
  return rg.test(str);
}



/**
 * 处理textare中的str，移除所有的空行和空格
 * @param ips
 * @returns {string}
 */
export function formartTextare_RemoveBlankSpace(str){
  if(typeof(str) == "undefined" || str=='' || str==null){
    return '';
  }
  var strArr = str.split(/\n/g);
  var tempArr= [];
  for(var i=0;i<strArr.length;i++) {
    if(strArr[i].replace(/(^\s*)|(\s*$)/g, "") == ''){
      continue;
    }
    tempArr.push(strArr[i].replace(/(^\s*)|(\s*$)/g, ""));
  }
  return tempArr.join("\n");
}

/**
 * 校验手机号
 * @param str
 * @returns {*}
 */
export function checkTel(str){
  var rg = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/;
  return rg.test(str);
}

/**
 * 校验IP或域名是否正确
 * @param str
 * @returns {boolean}
 */
export function checkIpOrDomain(str){
  let rgDomain = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/;
  let rgIp = /^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/;

  return (rgIp.test(str) || rgDomain.test(str));
}

/**
 * 校验掩码：支持255.255.0.0和24两种格式
 * @param str
 * @returns {boolean}
 */
export function checkMask(str){
  //校验两种掩码
  var rg2 = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/;
  var rg3 = /^([0-9]|1[0-9]|2[0-9]|3[0-2])$/;

  return (rg2.test(str) || rg3.test(str))
}

/**
 * 校验掩码：支持255.255.0.0格式
 * @param str
 * @returns {boolean}
 */
export function checkMask_2(str){
  //校验两种掩码
  var rg = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/;

  return rg.test(str);
}
